package leetcode_ago.bin_tree;

/**
 * 判断一棵二叉树是否是对称二叉树
 * 对称说明左右子树镜像
 */
public class Num101_SymmetricTree {
    public boolean isSymmetric(TreeNode root) {
        if(root==null){
            return true;
        }
        return isMirror(root.left,root.right);//判断二叉树左右子树是否镜像
    }

    /**
     * 判断两个二叉树是否镜像
     * @param left
     * @param right
     * @return
     */
    private boolean isMirror(TreeNode left, TreeNode right) {
        if(left==null&&right==null){
            return true;
        }
        //走到此处left,right不会都为空
        if(left==null||right==null){
            return false;
        }
        if(left.val!=right.val){
            return false;
        }
        //两个二叉树存在并且都不为空且根节点值相等
        //判断两个二叉树的左右子树是否镜像
        //left的左子树和right的右子树相等并且left的右子树和right的左子树相等
        return isMirror(left.left,right.right)&&isMirror(left.right,right.left);
    }
}
